package com.liaogui.web.template;


import com.liaogui.order.api.domain.ActInfo;
import lombok.extern.slf4j.Slf4j;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 抽奖模板方法
 * @author liaogui
 * @date 2025/2/27 22:18
 */
@Slf4j
public abstract class PrizeDrawServiceTemplate {

    /**
     *  抽奖前置处理
     */
    public abstract void beforePrizeDraw(ActInfo actInfo);

    /**
     * 抽奖
     */
    public abstract void doPrizeDraw(ActInfo actInfo);

    /**
     * 抽奖后置处理
     */
    public abstract void afterPrizeDraw(ActInfo actInfo);

    /**
     * 抽奖
     *
     * @return {@link String}
     */
    public ActInfo prizeDraw(String actId) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:sss");
        log.info("开始抽奖:{}", dateFormat.format(new Date()));
        long startTime = System.currentTimeMillis();
        ActInfo actInfo = new ActInfo();
        actInfo.setActId(actId);
        // 抽奖前置处理
        beforePrizeDraw(actInfo);
        log.info("抽奖前置处理完成:{}", dateFormat.format(new Date()));

        // 抽奖
        doPrizeDraw(actInfo);
        log.info("抽奖处理完成:{}:{}", dateFormat.format(new Date()), actInfo.getPrizeInfo());

        // 抽奖后置处理 抽奖策略
        afterPrizeDraw(actInfo);
        log.info("结束抽奖时间:{}", dateFormat.format(new Date()));
        log.info("结束抽奖用时:{}" ,System.currentTimeMillis() - startTime);

        return actInfo;
    }
}
